/*
 * Created on 26/09/2005
 */
package bancosys.tec.persist.exception;

import java.util.Locale;

import org.hibernate.HibernateException;

import bancosys.tec.exception.LocalizedMessageHolder;
import bancosys.tec.exception.MessageCreatorHelper;

/**
 * Excecao base da hierarquia de excecoes do Hibernate Extension.
 * 
 * @author Alexandre
 */
public class HibernateExtensionException extends HibernateException {

    private static final String BUNDLE_NAME = "jmine-tec-persist-messages";

    private LocalizedMessageHolder message;

    /**
     * C'tor
     * 
     * @param key A CHAVE do arquivo de i18n.
     * @param arguments ARGUMENTOS da mensagem, se houver.
     */
    public HibernateExtensionException(final String key, final Object... arguments) {
        super(key);
        this.message = MessageCreatorHelper.create(BUNDLE_NAME, key, arguments.length, arguments);
    }

    /**
     * C'tor
     * 
     * @param key A CHAVE do arquivo de i18n.
     * @param cause a CAUSA desta exception.
     * @param arguments ARGUMENTOS da mensagem, se houver.
     */
    public HibernateExtensionException(final String key, final Throwable cause, final Object... arguments) {
        super(key, cause);
        this.message = MessageCreatorHelper.create(BUNDLE_NAME, key, arguments.length, arguments);
    }

    /**
     * Retorna a mensagem convertida no default locale. Caso não seja possível, devolve a chave.
     * 
     * @return A mensagem ou a chave.
     */
    @Override
    public String getMessage() {
        return this.getMessage(Locale.getDefault());
    }

    /**
     * Retorna a mensagem convertida no default locale. Caso não seja possível, devolve a chave.
     * 
     * @param locale Locale
     * @return A mensagem ou a chave.
     */
    public String getMessage(final Locale locale) {
        return message.getMessage(locale);
    }
}
